home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / tools / ldbmp08 / ldbmp08s.lzh / LDBMP1.S < prev    next >
Text File  |  1997-06-11  |  3KB  |  161 lines

  1. *****************************************************************
  2. *    2色のBMP                        *
  3. *****************************************************************
  4.     .include    doscall.mac
  5.     .include    iocscall.mac
  6.     .include    myconst.h
  7.  
  8.     .xdef    _Bit1_prt
  9.  
  10.     .xref    line_byte
  11.     .xref    tate
  12.     .xref    yoko
  13.     .xref    x_pos
  14.     .xref    y_pos
  15.     .xref    gr_addr
  16.  
  17.     .text
  18.     .even
  19.  
  20. *****************************************************************
  21. *    16色表示                        *
  22. *****************************************************************
  23. _Bit1_prt:
  24.     bsr    bit1_prt
  25.     rts
  26.  
  27. *****************************************************************
  28. *    表示                            *
  29. *****************************************************************
  30. bit1_prt:
  31.     movea.l    gr_addr(pc),a1        *グラフィックデータの先頭
  32.  
  33.     move.w    x_pos(pc),gram_x    *GRAMの表示座標
  34.     move.w    y_pos(pc),gram_y
  35.  
  36.     clr.w    bmp_x            *BMPの表示座標(x,y)
  37.     clr.w    bmp_y
  38.  
  39.     move.w    yoko(pc),d0
  40.     cmp.w    #1024,d0
  41.     bcs    bit1_prt1
  42.     move.w    #1024,d0
  43. bit1_prt1:
  44.     move.w    d0,bmp_xd        *bmp_xdot
  45.  
  46.     move.w    tate(pc),d0
  47.     cmp.w    #1024,d0
  48.     bcs    bit1_prt2
  49.     move.w    #1024,d0
  50. bit1_prt2:
  51.     move.w    d0,bmp_yd        *bmp_ydot
  52.  
  53.     move.w    tate(pc),d0        *グラフィックデータの先頭アドレス
  54.     subq.w    #1,d0            *(tate-1-bmp_x)*line_byte+gr_addr
  55.     sub.w    bmp_x(pc),d0
  56.     mulu    line_byte(pc),d0
  57.     add.l    gr_addr(pc),d0
  58.     movea.l    d0,a1
  59.  
  60.     move.w    gram_x(pc),d0        *表示先画像アドレス
  61.     move.w    gram_y(pc),d1        *gram_y*2048+gram_x*2+$c00000
  62.     swap.w    d1
  63.     clr.w    d1
  64.     ror.l    #5,d1
  65.     add.w    d0,d0
  66.     add.w    d0,d1
  67.     movea.l    d1,a2
  68.     adda.l    #GRAM,a2
  69.  
  70.     bsr    bit1_put        *表示
  71.     rts
  72.  
  73. bit1_put:
  74.     move.w    bmp_xd(pc),d0        *横ドット数
  75.     move.w    bmp_yd(pc),d2        *縦ドット数
  76.     subq.w    #1,d2            *縦-1
  77.  
  78.     move.w    d0,d7            *表示元データの1ライン上へのバイト数
  79.     addq.w    #7,d7
  80.     lsr.w    #3,d7
  81.     add.w    line_byte(pc),d7
  82.  
  83.     move.w    #1024,d1        *表示先データの1ライン下までのバイト数
  84.     sub.w    d0,d1
  85.     add.w    d1,d1
  86.     movea.w    d1,a3
  87.  
  88.     move.w    d0,d6            *端数を計算
  89.     andi.w    #$0007,d6
  90.  
  91.     lsr.w    #3,d0            *横/8-1
  92.     subq.w    #1,d0
  93. bit1_put2:                *横ドットが偶数の時
  94.     move.w    d0,d1            *横ループ
  95. bit1_put3:
  96.     move.b    (a1)+,d3
  97.  
  98.     moveq.l    #0,d4
  99.     add.b    d3,d3
  100.     addx.b    d4,d4
  101.     move.w    d4,(a2)+
  102.     moveq.l    #0,d4
  103.     add.b    d3,d3
  104.     addx.b    d4,d4
  105.     move.w    d4,(a2)+
  106.     moveq.l    #0,d4
  107.     add.b    d3,d3
  108.     addx.b    d4,d4
  109.     move.w    d4,(a2)+
  110.     moveq.l    #0,d4
  111.     add.b    d3,d3
  112.     addx.b    d4,d4
  113.     move.w    d4,(a2)+
  114.     moveq.l    #0,d4
  115.     add.b    d3,d3
  116.     addx.b    d4,d4
  117.     move.w    d4,(a2)+
  118.     moveq.l    #0,d4
  119.     add.b    d3,d3
  120.     addx.b    d4,d4
  121.     move.w    d4,(a2)+
  122.     moveq.l    #0,d4
  123.     add.b    d3,d3
  124.     addx.b    d4,d4
  125.     move.w    d4,(a2)+
  126.     moveq.l    #0,d4
  127.     add.b    d3,d3
  128.     addx.b    d4,d4
  129.     move.w    d4,(a2)+
  130.     dbra.w    d1,bit1_put3
  131.  
  132.     move.w    d6,d1            *端数があるか
  133.     beq    bit1_put5        *ない
  134.     subq.w    #1,d1
  135.     move.b    (a1)+,d3
  136. bit1_put4:
  137.     moveq.l    #0,d4
  138.     add.b    d3,d3
  139.     addx.b    d4,d4
  140.     move.w    d4,(a2)+
  141.     dbra.w    d1,bit1_put4
  142.  
  143. bit1_put5:
  144.     suba.w    d7,a1            *変換元アドレス更新
  145.     add.l    a3,a2            *変換先アドレス更新
  146.     dbra    d2,bit1_put2
  147.     rts
  148.  
  149. *****************************************************************
  150. *    ワークエリア                        *
  151. *****************************************************************
  152.  
  153. gram_x    .ds.w    1            *表示する座標(GRAM)
  154. gram_y    .ds.w    1
  155.  
  156. bmp_x    .ds.w    1            *表示する座標(BMP)
  157. bmp_y    .ds.w    1
  158. bmp_xd    .ds.w    1            *表示するドット数
  159. bmp_yd    .ds.w    1
  160.     .even
  161.